import os
import time

import dotenv
# 1 llm
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

llm = ChatOpenAI(
    model="glm-4",
    base_url=os.getenv("ZP_BASE"),
    api_key=os.getenv("ZP_API_KEY"),
    temperature=0
)

user_input = """You're an AI assistant specializing in data analysis with MySQL SQL. Write professional MySQL SQL code for the following task. Additionally, offer a brief explanation about how you arrived at the SQL code. If the required column isn't explicitly stated in the context, suggest an alternative using available columns, but do not assume the existence of any columns that are not mentioned. You should respond in Chinese.

## Task:
从DOC_ASN_HEADER DOC_ASN_DETAILS这些表中, 查询查询未关闭的入库订单，组织编码为FLUX，仓库编码为AWAREHOUSE,CHENX,DATA_WH,FCP002,FLUXWH01,HAOTEST01,JYZ01,LIUC_01,LXC_CS,TEST100,TEST111,WH01,WH_WYJ,WMS_TEST_01,WUNANA,WUNANA02,WZ001,XC,XIAOJIE_WH,YYF,ZD_WH_01,ZG01,ZH_CK001,ZH_CK002,ZX_WAREHOUSE，货主编码为00000,111,CHENX，- 结果只回答SQL，不要解释，表必须有别名

- 查询库存时，必须选择表:INV_LOT_LOC_ID(主表)、BAS_SKU、BAS_LOCATION、INV_LOT_ATT;若需求中提到库区，则增加表：BAS_ZONE;若需求中提到区域，则增加表：BAS_ZONEGROUP

- 查询库存时，默认查询字段：仓库(warehouseid）、库存数量SUM(INV_LOT_LOC_ID.qty)、可用数量SUM(INV_LOT_LOC_ID.qty-INV_LOT_LOC_ID.qtyAllocated-INV_LOT_LOC_ID.qtyRpIn-INV_LOT_LOC_ID.qtyRpOut-INV_LOT_LOC_ID.qtyMvOut-INV_LOT_LOC_ID.qtyOnHold)。若需求中不包含“维度”、“汇总”，则增加字段：库位(locationid)、批次号(lotnum)、跟踪号(traceid)、货主(customerid)、产品代码(sku)、产品描述(skudescr1)、生产日期(lotatt01)、失效日期(lotatt02)、入库日期(lotatt03)、质量状态(lotatt08)

- 库存查询时，若需求中包含“点位“，则必须选择INV_LOT_LOC_ID(主表)、BAS_SKU、BAS_LOCATION、INV_LOT_ATT、INV_LOC_POSITION;查询字段：仓库(warehouseid）、库位(locationid)、批次号(lotnum)、跟踪号(traceid)、点位(POSITION)、货主(customerid)、产品代码(sku)、产品描述(skudescr1)、库存数量SUM(INV_LOT_LOC_ID.qty)、可用数量SUM(INV_LOT_LOC_ID.qty-INV_LOT_LOC_ID.qtyAllocated-INV_LOT_LOC_ID.qtyRpIn-INV_LOT_LOC_ID.qtyRpOut-INV_LOT_LOC_ID.qtyMvOut-INV_LOT_LOC_ID.qtyOnHold)、在库标记(INV_LOC_POSITION.STOCKFLAG)。

- 查询库存时，若需求中按产品汇总，则默认查询字段：仓库(warehouseid)、货主(customerid)、产品代码(sku)、产品描述(skudescr1)、库存数量SUM(INV_LOT_LOC_ID.qty)、可用数量SUM(INV_LOT_LOC_ID.qty-INV_LOT_LOC_ID.qtyAllocated-INV_LOT_LOC_ID.qtyRpIn-INV_LOT_LOC_ID.qtyRpOut-INV_LOT_LOC_ID.qtyMvOut-INV_LOT_LOC_ID.qtyOnHold)；查询库存时，若需求中按货主汇总，则默认查询字段：仓库(warehouseid)、货主(customerid)、库存数量SUM(INV_LOT_LOC_ID.qty)、可用数量SUM(INV_LOT_LOC_ID.qty-INV_LOT_LOC_ID.qtyAllocated-INV_LOT_LOC_ID.qtyRpIn-INV_LOT_LOC_ID.qtyRpOut-INV_LOT_LOC_ID.qtyMvOut-INV_LOT_LOC_ID.qtyOnHold)；查询库存时，若需求中按库位汇总，则默认查询字段：仓库(warehouseid)、库位(locationid)、库存数量SUM(INV_LOT_LOC_ID.qty)、可用数量SUM(INV_LOT_LOC_ID.qty-INV_LOT_LOC_ID.qtyAllocated-INV_LOT_LOC_ID.qtyRpIn-INV_LOT_LOC_ID.qtyRpOut-INV_LOT_LOC_ID.qtyMvOut-INV_LOT_LOC_ID.qtyOnHold)；查询库存时，若需求中按批次汇总，则默认查询字段：仓库(warehouseid)、批次(lotnum)、货主(customerid)、产品代码(sku)、产品描述(skudescr1)、生产日期(lotatt01)、失效日期(lotatt02)、入库日期(lotatt03)、质量状态(lotatt08)库存数量SUM(INV_LOT_LOC_ID.qty)、可用数量SUM(INV_LOT_LOC_ID.qty-INV_LOT_LOC_ID.qtyAllocated-INV_LOT_LOC_ID.qtyRpIn-INV_LOT_LOC_ID.qtyRpOut-INV_LOT_LOC_ID.qtyMvOut-INV_LOT_LOC_ID.qtyOnHold)；

- 查询库存时，若定位了表INV_LOC_POSITION，关联条件必须包含：organizationId、warehouseId、traceId、locationid

- 查询库存时，若需求中提库龄，必须从以下表中选择:INV_LOT_LOC_ID(主表)、INV_LOT_ATT、BAS_SKU、BAS_LOCATION。字段描述：库龄(Now-INV_LOT_ATT.LOTATT03)

- 查询空库位/库位利用率时，必须选择BAS_LOCATION，INV_LOT_LOC_ID(主表)。若需求中提到库区，则增加表：BAS_ZONE；若需求中提到区域，则增加表：BAS_ZONEGROUP。

- 查询库存交易（库存事务，库存履历，库存记录，交易记录），需要带出来docNo,transactionType,docType,transactionTime,operator,数量sum(qty_each),fmCustomerId,fmSku,sku描述（fmsku和BAS_SKU关联的skuDescr1）,FM生产日期(fmLotNum关联INV_LOT_ATT的lotatt01)，FM失效日期(fmLotNum关联INV_LOT_ATT的lotatt02),FM质量状态(fmLotNum关联INV_LOT_ATT的lotatt08),TO生产日期(toLotNum关联INV_LOT_ATT的lotatt01)，TO失效日期(toLotNum关联INV_LOT_ATT的lotatt02),TO质量状态(toLotNum关联INV_LOT_ATT的lotatt08)

- 查询库存交易/库存事务/库存履历/库存记录时，必须选择表：ACT_TRANSACTION_LOG(主表)、INV_LOT_ATT、BAS_SKU、BAS_LOCATION。若需求中提到库区，则增加表：BAS_ZONE；若需求中提到区域，则增加表：BAS_ZONEGROUP。

- 查询盘点（盘点结果、盘点信息、盘点任务、盘点记录），必须选择表：TSK_TASKLISTS(主表)、COU_REQUEST、BAS_LOCATION。若需求中提到产品，增加表BAS_SKU。若需求中提到库区，则增加表：BAS_ZONE。若需求中提到区域，则增加表：BAS_ZONEGROUP。若需求中提到批次/批次号/批次属性，则增加表：INV_LOT_ATT、BAS_SKU。

- 查询盘点（盘点结果、盘点信息、盘点任务、盘点记录），默认查询盘点单号(TSK_TASKLISTS.docNo)、盘点库位(TSK_TASKLISTS.fmLocation)、任务数量SUM(TSK_TASKLISTS.fmQty_Each)、盘点数量SUM(TSK_TASKLISTS.planToQty_Each)。若需求中提到跟踪号，则查询字段:跟踪号(TSK_TASKLISTS.fmId)。

- 查询盘点（盘点结果、盘点信息、盘点任务、盘点记录），若关联了表BAS_SKU，则查询字段货主(CUSTOMERID)、产品(SKU),产品描述(SKUDESCR1)。若关联了表INV_LOT_ATT，则查询字段：生产日期(planToLotNum关联INV_LOT_ATT的lotatt01)、失效日期(planToLotNum关联INV_LOT_ATT的lotatt02)、入库日期(planToLotNum关联INV_LOT_ATT的lotatt03)、质量状态(planToLotNum关联INV_LOT_ATT的lotatt08)。

- 若需求中提到货类，则增加表：BAS_CUSTOMERFREIGHT、BAS_SKU。增加查询字段：货类代码(freightCode)、货类描述(freightDescr1)

- 查询任务（任务记录、任务清单）时，必须选择表：TSK_TASKLISTS（主表）、BAS_SKU、BAS_LOCATION、INV_LOT_ATT。

- 查询任务（任务记录、任务清单）时，默认查询字段：仓库（warehouseId）、任务号（taskId）、任务序号（taskId_Sequence）、任务类型（taskType）、单据号（docNo）、单据行号（docLineNo）、单据类型（docType）、产品（sku）、产品描述(skudescr1)、任务数量sum(fmQty_Each)、目标数量sum(planToQty_Each)、冻结人（holdWho）、任务执行人（closeWho）、执行时间（closeTime）、生产日期(tolotnum关联INV_LOT_ATT的lotatt01)、失效日期(tolotnum关联INV_LOT_ATT的lotatt02)、质量状态(tolotnum关联INV_LOT_ATT的lotatt08)；未完成的任务是指taskprocess<'90'的任务。


- 若需求中提到工作量/绩效时，必须选择表：ACT_TRANSACTION_LOG(主表)。字段查询：人员ID（operator）、业务类型（transactionType）、单据量（count(distinct docno)）、作业数量（sum(toqty_each)）、作业日期（transactionTime）。作业时间格式为YYYY-MM-DD。WHERE条件中增加：transactionId='99';

- 查询库存时，若需求中提到动碰，则where条件中增加：EXISTS (SELECT 1 FROM ACT_TRANSACTION_LOG WHERE ACT_TRANSACTION_LOG.organizationId=INV_LOT_LOC_ID.organizationId
AND ACT_TRANSACTION_LOG.warehouseId=INV_LOT_LOC_ID.warehouseId
AND ACT_TRANSACTION_LOG.FMID=INV_LOT_LOC_ID.TRACEID
AND ACT_TRANSACTION_LOG.FMLOCATIONID=INV_LOT_LOC_ID.LOCATIONID
AND ACT_TRANSACTION_LOG.FMLOTNUM=INV_LOT_LOC_ID.lotnum)

- 若需求中提到养护，必须选择表：ACT_MEDICINE_MAINTENANCE、INV_LOT_ATT、BAS_SKU、BAS_LOCATION。若需求中提到库区，则增加表：BAS_ZONE；若需求中提到区域，则增加表：BAS_ZONEGROUP

- 若需求中提到养护，则需要带出字段：仓库(warehouseid)、任务号(taskid)、任务状态(taskstatus)、养护日期(mtDate)、养护类型(mtType)、养护方法(method)、库位编码(locationId)、质量状况(qualityStatus)、处理措施(handling)、数量(qty)、操作人(operator)、预防措施(provision)、存在问题(problem)、澄检结果(liquityCheck)、重点养护原因(maintenanceReason)、跟踪号(traceId)、生产日期(关联INV_LOT_ATT的lotatt01)、失效日期(关联INV_LOT_ATT的lotatt08)、入库日期(关联INV_LOT_ATT的lotatt08)、质量状态(关联INV_LOT_ATT的lotatt08)

- 查询冻结记录时，默认选择表：ACT_INVENTORYHOLD、INV_LOT_ATT、BAS_SKU、BAS_LOCATION。若需求中提到库区，则增加表：BAS_ZONE；若需求中提到区域，则增加表：BAS_ZONEGROUP

- 查询冻结记录时，默认查询字段：仓库编号(warehouseId)、冻结编号(inventoryHoldId)、冻结标记(holdFlag)、冻结方法(holdBy)、冻结原因(holdCode)、原因描述(holdReason)
冻结数量(qtyOnHold)、冻结日期(dateOn)、冻结人(whoOn)、释放日期(dateOff)、释放人(whoOff)、货主(customerId)、产品代码(sku)、产品描述(关联BAS_SKU的skudescr1)、库位(locationId)、跟踪号(traceid)、生产日期(关联INV_LOT_ATT的lotatt01)、失效日期(关联INV_LOT_ATT的lotatt02)、入库日期(关联INV_LOT_ATT的lotatt03)、质量状态(关联INV_LOT_ATT的lotatt08);

- SQL查询的字段，都AS为字段描述；

- 查询调整单时，选择表：DOC_ADJ_HEADER、DOC_ADJ_DETAILS、BAS_SKU、BAS_LOCATION、INV_LOT_ATT；字段查询：仓库编号(warehouseId)、移动单号(mdocNo)、移动类型(mdocType)、行号(mdocLineNo)、行状态(mdocLineStatus)、产品代码(sku)、产品描述(skuDescr1)、批次号(lotNum)、FM库位(fmLocation)、目标库位(toLocation)、原始跟踪号(fmId)、目标跟踪号(toId)、移库数量(toQty)

- 查询移动单时，选择表：DOC_MOVEMENT_HEADER、DOC_MOVEMENT_DETAILS、BAS_SKU、BAS_LOCATION、INV_LOT_ATT；字段查询：仓库编号(warehouseId)、移动单号(mdocNo)、移动类型(mdocType)、状态(status)、货主(customerId)、行号(mdocLineNo)、行状态(mdocLineStatus)、产品代码(sku)、产品描述(skuDescr1)、批次号(lotNum)、FM库位(fmLocation)、目标库位(toLocation)、原始跟踪号(fmId)、目标跟踪号(toId)、移库数量(toQty)

- WMS系统功能描述及对应的功能代码：角色管理（A0501）、用户管理（A0502）、区域（A1004）、库区（A1005）、库位（A1009）、客户档案（A1017）、产品档案（A1028）、包装（A1001）、货物类型（A1016）、预期到货通知（A2002）、采购订单（A2001）、库存转移单（A2504）、库存余量（A2501）、库存事务（A2502）、库存盘点单（A2507）、库存移动单（A2506）、库存调整单（A2505）、销售订单（A3019）、发货订单（A3001）、波次计划（A3012）、出库复核（A3014）、任务管理（A3508）

- 若WHERE条件中，LOTATT01、LOTATT02、LOTATT03和当前日期做比较或逻辑计算，需要转为日期格式。

- 拣货位包括库位使用locationUsage为EA/CS/AP/HP/PC的库位合集。存储库位是locationUsage=RS的库位。拣货位如果细分 EA-拆零拣货位    CS-箱拣货位    PC-箱件合并拣货位     AP-补充拣货位    HP-快拣位。 其他库位使用的知识：SS-理货站    ST-过渡库位    WB-组装工作区

- 库存查询时，若需求中提到近效期，但未说明近效期X天、近效期X月、近效期X年，这where条件按照：LOTATT02 between 当前日期，当前日期+SKU有效期(若产品的有效期单位是YEAR，则折算为有效期*365，若产品的有效期单位是MONTH，则折算为有效期*30，否默认产品维护的有效期)；

- 库存查询时，若需求中提到拣货位上限、拣货位下限，则增加表：BAS_FORWARDING_LOC

- 查询库存时，若需求中要求查询效期天数或查询近效期、过效期、过期库存，则增加查询字段效期天数(失效日期-当前日期)；

- 若查询SQL中包含定位表的主键字段，则优先查询，其他非主键字段在主键后面查询

- 若查询的日期含时间（时、分、秒），则按照yyyy-MM-dd HH:mm:ss格式

- 当提到发运订单/出库订单时，则选中表DOC_ORDER_HEADER（主表）；如果提到发运订单明细/出库明细时，则增加表DOC_ORDER_DETAILS；如果提到拣货/复核则增加表ACT_ALLOCATION_DETAILS；查询订单信息时显示字段：发运订单编号，订单状态，订单类型，收货人名称，订单数量。

- 当提到预期到货通知/入库订单时，则选中表DOC_ASN_HEADER（主表）；如果提到预期到货通知明细/入库明细时，则增加表DOC_ASN_DETAILS。查询订单信息时显示字段：预期到货通知编号，订单状态，订单类型，供应商名称，预期数量。



The meta data of related tables are as follows:

### DOC_ASN_HEADER 预期到货通知，入库单头，ASN头信息，预期到货通知信息

| Column Name           | Column Type   | Is Primary Key   | Column Description                           |
|:----------------------|:--------------|:-----------------|:---------------------------------------------|
| organizationId        | VARCHAR(20)   | Y                | 组织编号,                                        |
| warehouseId           | VARCHAR(20)   | Y                | 仓库编号,                                        |
| asnNo                 | VARCHAR(20)   | Y                | 预期到货通知编号, 入库单号，入库单，入库编号，ASN单号                |
| asnType               | VARCHAR(20)   | N                | 预期到货通知类型,                                    |
| asnStatus             | VARCHAR(2)    | N                | 预期到货通知状态,                                    |
| customerId            | VARCHAR(30)   | N                | 货主, 货主，货主信息，客户编码，客户编号                        |
| asnCreationTime       | DATETIME      | N                | 预期到货通知创建时间,                                  |
| expectedArriveTime1   | DATETIME      | N                | 预期到货时间1,                                     |
| expectedArriveTime2   | DATETIME      | N                | 预期到货时间2,                                     |
| asnReference1         | VARCHAR(100)  | N                | 参考编号1,                                       |
| asnReference2         | VARCHAR(50)   | N                | 参考编号2,                                       |
| asnReference3         | VARCHAR(50)   | N                | 参考编号3,                                       |
| asnReference4         | VARCHAR(50)   | N                | 参考编号4,                                       |
| asnReference5         | VARCHAR(50)   | N                | 参考编号5,                                       |
| door                  | VARCHAR(10)   | N                | 月台,                                          |
| carrierId             | VARCHAR(30)   | N                | 承运人,                                         |
| carrierName           | VARCHAR(200)  | N                | 承运人名称,                                       |
| carrierContact        | VARCHAR(200)  | N                | 承运人联系人,                                      |
| carrierMail           | VARCHAR(100)  | N                | 承运人电子邮件,                                     |
| carrierFax            | VARCHAR(50)   | N                | 承运人传真,                                       |
| carrierTel1           | VARCHAR(50)   | N                | 承运人电话1,                                      |
| carrierTel2           | VARCHAR(50)   | N                | 承运人电话2,                                      |
| carrierAddress1       | VARCHAR(200)  | N                | 承运人地址1,                                      |
| carrierAddress2       | VARCHAR(200)  | N                | 承运人地址2,                                      |
| carrierAddress3       | VARCHAR(100)  | N                | 承运人地址3,                                      |
| carrierAddress4       | VARCHAR(100)  | N                | 承运人地址4,                                      |
| carrierStreet         | VARCHAR(50)   | N                | 承运人街道,                                       |
| carrierDistrict       | VARCHAR(50)   | N                | 承运人区,                                        |
| carrierCity           | VARCHAR(50)   | N                | 承运人城市,                                       |
| carrierProvince       | VARCHAR(50)   | N                | 承运人省/州,                                      |
| carrierCountry        | VARCHAR(50)   | N                | 承运人国家和地区,                                    |
| carrierZip            | VARCHAR(50)   | N                | 承运人邮编,                                       |
| countryOfOrigin       | VARCHAR(20)   | N                | 原产国,                                         |
| countryOfDestination  | VARCHAR(20)   | N                | 目的国,                                         |
| placeOfLoading        | VARCHAR(60)   | N                | 装运地,                                         |
| placeOfDischarge      | VARCHAR(60)   | N                | 卸货地点,                                        |
| placeOfDelivery       | VARCHAR(60)   | N                | 交货地点,                                        |
| paymentTerms          | VARCHAR(10)   | N                | 付款条款,                                        |
| paymentTermsDescr     | VARCHAR(100)  | N                | 付款描述,                                        |
| deliveryTerms         | VARCHAR(10)   | N                | 交货条款,                                        |
| deliveryTermsDescr    | VARCHAR(100)  | N                | 交付描述,                                        |
| poNo                  | VARCHAR(20)   | N                | 采购订单编号, 采购订单，采购单，采购单号，                       |
| createSource          | VARCHAR(35)   | N                | 创建来源,                                        |
| byTrace_Flag          | VARCHAR(1)    | N                | 是否执行码盘操作,                                    |
| reserve_Flag          | VARCHAR(1)    | N                | 是否预约库位,                                      |
| receiveId             | BIGINT        | N                | 人工收货完成标记,                                    |
| supplierId            | VARCHAR(30)   | N                | 供应商编号,                                       |
| supplierName          | VARCHAR(200)  | N                | 供应商名称,                                       |
| supplierContact       | VARCHAR(500)  | N                | 供应商联系人,                                      |
| supplierMail          | VARCHAR(100)  | N                | 供应商电子邮件,                                     |
| supplierFax           | VARCHAR(50)   | N                | 供应商传真,                                       |
| supplierTel1          | VARCHAR(50)   | N                | 供应商电话1,                                      |
| supplierTel2          | VARCHAR(40)   | N                | 供应商电话2,                                      |
| supplierAddress1      | VARCHAR(200)  | N                | 供应商地址1,                                      |
| supplierAddress2      | VARCHAR(200)  | N                | 供应商地址2,                                      |
| supplierAddress3      | VARCHAR(100)  | N                | 供应商地址3,                                      |
| supplierAddress4      | VARCHAR(100)  | N                | 供应商地址4,                                      |
| supplierStreet        | VARCHAR(50)   | N                | 供应商街道,                                       |
| supplierDistrict      | VARCHAR(50)   | N                | 供应商区,                                        |
| supplierCity          | VARCHAR(50)   | N                | 供应商城市,                                       |
| supplierProvince      | VARCHAR(50)   | N                | 供应商省/州,                                      |
| supplierCountry       | VARCHAR(20)   | N                | 供应商国家和地区,                                    |
| supplierZip           | VARCHAR(10)   | N                | 供应商邮编,                                       |
| billingClass_Group    | VARCHAR(10)   | N                | 订单组号,                                        |
| ediSendFlag           | CHAR(1)       | N                | 接口发送标记,                                      |
| ediSendTime2          | DATETIME      | N                | 接口发送时间2,                                     |
| ediSendTime3          | DATETIME      | N                | 接口发送时间3,                                     |
| ediSendTime           | DATETIME      | N                | 接口发送时间,                                      |
| ediErrorCode          | VARCHAR(50)   | N                | 接口错误代码, 回传失败代码，回传失败编码，接口错误编码，接口错误代码，接口错误code |
| ediErrorMessage       | TEXT          | N                | 接口错误消息, 回传失败信息，回传失败信息，接口错误信息                 |
| ediSendFlag2          | CHAR(1)       | N                | 接口发送标记2,                                     |
| ediErrorCode2         | VARCHAR(50)   | N                | 接口错误代码2,                                     |
| ediErrorMessage2      | TEXT          | N                | 接口错误消息2,                                     |
| ediSendFlag3          | CHAR(1)       | N                | 接口发送标记3,                                     |
| ediErrorCode3         | VARCHAR(50)   | N                | 接口错误代码3,                                     |
| ediErrorMessage3      | TEXT          | N                | 接口错误消息3,                                     |
| hedi01                | VARCHAR(200)  | N                | EDI接口字段1,                                    |
| hedi02                | VARCHAR(200)  | N                | EDI接口字段2,                                    |
| hedi03                | VARCHAR(200)  | N                | EDI接口字段3,                                    |
| hedi04                | VARCHAR(200)  | N                | EDI接口字段4,                                    |
| hedi05                | VARCHAR(200)  | N                | EDI接口字段5,                                    |
| hedi06                | VARCHAR(200)  | N                | EDI接口字段6,                                    |
| hedi07                | VARCHAR(200)  | N                | EDI接口字段7,                                    |
| hedi08                | VARCHAR(200)  | N                | EDI接口字段8,                                    |
| hedi09                | DECIMAL(18,8) | N                | EDI接口字段9,                                    |
| hedi10                | DECIMAL(18,8) | N                | EDI接口字段10,                                   |
| issuePartyId          | VARCHAR(30)   | N                | 下单方代码,                                       |
| issuePartyName        | VARCHAR(200)  | N                | 下单方名称,                                       |
| issuePartyContact     | VARCHAR(200)  | N                | 下单方联系人,                                      |
| issuePartyMail        | VARCHAR(100)  | N                | 下单方电子邮件,                                     |
| issuePartyFax         | VARCHAR(50)   | N                | 下单方传真,                                       |
| issuePartyTel1        | VARCHAR(50)   | N                | 下单方电话1,                                      |
| issuePartyTel2        | VARCHAR(40)   | N                | 下单方电话2,                                      |
| issuePartyAddress1    | VARCHAR(200)  | N                | 下单方地址1,                                      |
| issuePartyAddress2    | VARCHAR(200)  | N                | 下单方地址2,                                      |
| issuePartyAddress3    | VARCHAR(100)  | N                | 下单方地址3,                                      |
| issuePartyAddress4    | VARCHAR(100)  | N                | 下单方地址4,                                      |
| issuePartyStreet      | VARCHAR(50)   | N                | 下单方街道,                                       |
| issuePartyDistrict    | VARCHAR(50)   | N                | 下单方区,                                        |
| issuePartyCity        | VARCHAR(50)   | N                | 下单方城市,                                       |
| issuePartyProvince    | VARCHAR(50)   | N                | 下单方省/州,                                      |
| issuePartyCountry     | VARCHAR(20)   | N                | 下单方国家和地区,                                    |
| issuePartyZip         | VARCHAR(10)   | N                | 下单方邮编,                                       |
| billingId             | VARCHAR(30)   | N                | 结算人,                                         |
| billingName           | VARCHAR(200)  | N                | 结算人名称,                                       |
| billingContact        | VARCHAR(200)  | N                | 结算人联系人,                                      |
| billingMail           | VARCHAR(100)  | N                | 结算人电子邮件,                                     |
| billingFax            | VARCHAR(50)   | N                | 结算人传真,                                       |
| billingTel1           | VARCHAR(50)   | N                | 结算人电话1,                                      |
| billingTel2           | VARCHAR(50)   | N                | 结算人电话2,                                      |
| billingAddress1       | VARCHAR(200)  | N                | 结算人地址1,                                      |
| billingAddress2       | VARCHAR(200)  | N                | 结算人地址2,                                      |
| billingAddress3       | VARCHAR(100)  | N                | 结算人地址3,                                      |
| billingAddress4       | VARCHAR(100)  | N                | 结算人地址4,                                      |
| billingStreet         | VARCHAR(50)   | N                | 结算人街道,                                       |
| billingDistrict       | VARCHAR(50)   | N                | 结算人区,                                        |
| billingCity           | VARCHAR(50)   | N                | 结算人城市,                                       |
| billingProvince       | VARCHAR(50)   | N                | 结算人省/州,                                      |
| billingCountry        | VARCHAR(20)   | N                | 结算人国家和地区,                                    |
| billingZip            | VARCHAR(10)   | N                | 结算人邮编,                                       |
| asnPrintFlag          | VARCHAR(1)    | N                | 入库单打印标记,                                     |
| qcStatus              | VARCHAR(2)    | N                | 质检状态,                                        |
| returnPrintFlag       | VARCHAR(1)    | N                | 退货回收标签打印标记,                                  |
| zoneGroup             | VARCHAR(20)   | N                | 区域,                                          |
| priority              | CHAR(1)       | N                | 优先级,                                         |
| releaseStatus         | CHAR(1)       | N                | 订单释放标记,                                      |
| packMaterialConsume   | VARCHAR(1)    | N                | 包装材料消耗,                                      |
| followUp              | VARCHAR(20)   | N                | 业务担当,                                        |
| lastReceivingTime     | DATETIME      | N                | 最后收货时间,                                      |
| actualArriveTime      | DATETIME      | N                | 实际到达时间,                                      |
| archiveFlag           | CHAR(1)       | N                | 归档标记,                                        |
| totalCubic            | DECIMAL(24,8) | N                | 总体积,                                         |
| totalGrossWeight      | DECIMAL(18,8) | N                | 总毛重,                                         |
| totalNetWeight        | DECIMAL(18,8) | N                | 总净重,                                         |
| totalPrice            | DECIMAL(24,8) | N                | 总价,                                          |
| totalLineCount        | INT           | N                | 总行数,                                         |
| curLineNo             | INT           | N                | 当前行号值,                                       |
| totalSkuCount         | INT           | N                | 总产品数,                                        |
| ocpNo                 | VARCHAR(50)   | N                | OCP单号,                                       |
| splitFlag             | CHAR(1)       | N                | 分单标记,                                        |
| reverseAsnNo          | VARCHAR(20)   | N                | 模糊匹配单号,                                      |
| totalQty              | DECIMAL(18,8) | N                | 总数量,                                         |
| crossdockFlag         | CHAR(1)       | N                | 越库标记,                                        |
| deliveryNo            | VARCHAR(30)   | N                | 运单号,                                         |
| noteText              | MEDIUMTEXT    | N                | 备注,                                          |
| udf01                 | VARCHAR(500)  | N                | 自定义01,                                       |
| udf02                 | VARCHAR(500)  | N                | 自定义02,                                       |
| udf03                 | VARCHAR(500)  | N                | 自定义03,                                       |
| udf04                 | VARCHAR(500)  | N                | 自定义04,                                       |
| udf05                 | VARCHAR(500)  | N                | 自定义05,                                       |
| udf06                 | VARCHAR(500)  | N                | 自定义06,                                       |
| currentVersion        | INT           | N                | 当前版本号,                                       |
| oprSeqFlag            | VARCHAR(65)   | N                | 操作流水标记,                                      |
| addWho                | VARCHAR(40)   | N                | 新增人员,                                        |
| addTime               | DATETIME      | N                | 新增时间,                                        |
| editWho               | VARCHAR(40)   | N                | 编辑人员,                                        |
| editTime              | DATETIME      | N                | 编辑时间,                                        |
| parentAsnNo           | VARCHAR(20)   | N                | 父ASN编号,                                      |
| warehouseTransferFlag | CHAR(1)       | N                | 调拨标记,                                        |
| erpCancelFlag         | CHAR(1)       | N                | 接口取消单标记, 上游取消标记，取消标记，取消标识，订单取消标记             |
| serviceType           | VARCHAR(20)   | N                | 服务类型,                                        |
| syncFlag              | CHAR(1)       | N                | 同步标记,                                        |

When querying asnType, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| *        | *      |
| 盘盈入库     | ADJ    |
| 采购订单     | CG     |
| 盲收       | BL     |
| 销售订单     | CM     |
| 采购收货     | PR     |
| 退货       | RT     |
| 退货入库单    | TY     |
| 差异回单     | TYD    |
| 杂项入库     | OT     |
| 生产采购     | POC    |
| 调拨入库     | TT     |
| 拆箱单      | UNPACK |
| 换货单      | EX     |
| 新品入库     | XXXP   |

When querying asnStatus, MUST refer to the following table and map string to its corresponding code.
| String   |   Code |
|:---------|-------:|
| 订单创建     |     00 |
| 预约成功     |     05 |
| 已码盘      |     10 |
| 部分收货     |     30 |
| 完全收货     |     40 |
| 收货取消     |     90 |
| 等待释放     |     98 |
| ASN关闭    |     99 |

When querying paymentTerms, MUST refer to the following table and map string to its corresponding code.
| String   | Code     |
|:---------|:---------|
| 现金       | CASH     |
| 支票       | ID       |
| 信用证      | LC       |
| 转账       | TRANSFER |
| 电子支付     | EPAY     |
| 电汇       | WIRE     |

When querying deliveryTerms, MUST refer to the following table and map string to its corresponding code.
| String   | Code      |
|:---------|:----------|
| 理货站-理货站  | CFS-CFS   |
| 场站-场站    | CY-CY     |
| 门到门交付    | DOOR-DOOR |

When querying ediSendFlag, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 尚未发送     | N      |
| 发送成功     | Y      |
| 不需要发送    | O      |
| 发送失败     | W      |
| 发送中      | R      |

When querying ediSendFlag2, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 尚未发送     | N      |
| 发送成功     | Y      |
| 不需要发送    | O      |
| 发送失败     | W      |
| 发送中      | R      |

When querying ediSendFlag3, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 尚未发送     | N      |
| 发送成功     | Y      |
| 不需要发送    | O      |
| 发送失败     | W      |
| 发送中      | R      |

When querying asnPrintFlag, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 否        | N      |
| 是        | Y      |

When querying qcStatus, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 无质检任务    | --     |
| 质检单创建    | 00     |
| 部分取样     | 01     |
| 全部取样     | 02     |
| 部分质检     | 10     |
| 全部质检     | 20     |
| 部分还样     | 30     |
| 全部还样     | 40     |
| 质检取消     | 90     |
| 质检关闭     | 99     |
| 免检       | NO     |

When querying releaseStatus, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 订单冻结     | H      |
| 订单未释放    | N      |
| 订单任务下发   | R      |
| 订单释放     | Y      |

When querying packMaterialConsume, MUST refer to the following table and map string to its corresponding code.
| String   | Code   |
|:---------|:-------|
| 否        | N      |
| 是        | Y      |



### DOC_ASN_DETAILS 预期到货通知明细，入库明细，入库单明细，ASN明细，预期到货通知明细

| Column Name            | Column Type   | Is Primary Key   | Column Description               |
|:-----------------------|:--------------|:-----------------|:---------------------------------|
| organizationId         | VARCHAR(20)   | Y                | 组织编号,                            |
| warehouseId            | VARCHAR(20)   | Y                | 仓库编号,                            |
| asnNo                  | VARCHAR(20)   | Y                | 预期到货通知编号, 入库单号，入库单，入库编号，ASN单号    |
| asnLineNo              | INT           | Y                | 行号,                              |
| customerId             | VARCHAR(30)   | N                | 货主, 货主，货主信息，客户编码，客户编号            |
| sku                    | VARCHAR(50)   | N                | 产品代码, 产品，产品信息，产品编码，产品编号          |
| skuDescr               | VARCHAR(500)  | N                | 产品描述（L）,                         |
| poNo                   | VARCHAR(20)   | N                | 采购订单编号, 采购订单，采购单，采购单号，           |
| poLineNo               | INT           | N                | 采购单行号,                           |
| lineStatus             | VARCHAR(2)    | N                | 行状态,                             |
| receivedTime           | DATETIME      | N                | 收货时间,                            |
| expectedQty            | DECIMAL(24,8) | N                | 预期数量,                            |
| expectedQty_Each       | DECIMAL(18,8) | N                | 预期数量_EA,                         |
| receivedQty            | DECIMAL(18,8) | N                | 收货数量,                            |
| receivedQty_Each       | DECIMAL(18,8) | N                | 收货数量_EA,                         |
| packId                 | VARCHAR(50)   | N                | 包装代码, 包装ID，包装编码，包装编号，包装号         |
| packUom                | VARCHAR(10)   | N                | 单位,                              |
| holdRejectCode         | VARCHAR(10)   | N                | 冻结原因代码,                          |
| holdRejectReason       | VARCHAR(60)   | N                | 冻结原因描述,                          |
| receivingLocation      | VARCHAR(60)   | N                | 收货库位,                            |
| containerId            | VARCHAR(30)   | N                | 容器编号,                            |
| lotAtt01               | VARCHAR(20)   | N                | 批次属性01,                          |
| lotAtt02               | VARCHAR(20)   | N                | 批次属性02,                          |
| lotAtt03               | VARCHAR(20)   | N                | 批次属性03,                          |
| lotAtt04               | VARCHAR(100)  | N                | 批次属性04,                          |
| lotAtt05               | VARCHAR(100)  | N                | 批次属性05,                          |
| lotAtt06               | VARCHAR(100)  | N                | 批次属性06,                          |
| lotAtt07               | VARCHAR(100)  | N                | 批次属性07,                          |
| lotAtt08               | VARCHAR(100)  | N                | 批次属性08,                          |
| lotAtt09               | VARCHAR(100)  | N                | 批次属性09,                          |
| lotAtt10               | VARCHAR(100)  | N                | 批次属性10,                          |
| lotAtt11               | VARCHAR(100)  | N                | 批次属性11,                          |
| lotAtt12               | VARCHAR(100)  | N                | 批次属性12,                          |
| lotAtt13               | VARCHAR(100)  | N                | 批次属性13,                          |
| lotAtt14               | VARCHAR(100)  | N                | 批次属性14,                          |
| lotAtt15               | VARCHAR(100)  | N                | 批次属性15,                          |
| lotAtt16               | VARCHAR(100)  | N                | 批次属性16,                          |
| lotAtt17               | VARCHAR(100)  | N                | 批次属性17,                          |
| lotAtt18               | VARCHAR(100)  | N                | 批次属性18,                          |
| lotAtt19               | VARCHAR(100)  | N                | 批次属性19,                          |
| lotAtt20               | VARCHAR(100)  | N                | 批次属性20,                          |
| lotAtt21               | VARCHAR(100)  | N                | 批次属性21,                          |
| lotAtt22               | VARCHAR(100)  | N                | 批次属性22,                          |
| lotAtt23               | VARCHAR(100)  | N                | 批次属性23,                          |
| lotAtt24               | VARCHAR(100)  | N                | 批次属性24,                          |
| totalCubic             | DECIMAL(24,8) | N                | 总体积,                             |
| totalGrossWeight       | DECIMAL(18,8) | N                | 总毛重,                             |
| totalNetWeight         | DECIMAL(18,8) | N                | 总净重,                             |
| totalPrice             | DECIMAL(24,8) | N                | 总价,                              |
| palletizeQty_Each      | DECIMAL(18,8) | N                | 码盘数量,                            |
| palletizeMethod        | VARCHAR(8)    | N                | 暂时未用,                            |
| planToLoc              | VARCHAR(60)   | N                | 目标库位,                            |
| reserve_Flag           | VARCHAR(1)    | N                | 是否预约库位,                          |
| alternativeSku         | VARCHAR(100)  | N                | 产品别名,                            |
| alternativeDescr       | VARCHAR(200)  | N                | 产品别名描述,                          |
| printLabel             | VARCHAR(1)    | N                | 打印标记,                            |
| damagedQty_Each        | DECIMAL(18,8) | N                | 破损数量,                            |
| rejectedQty            | DECIMAL(18,8) | N                | 拒收数量,                            |
| rejectedQty_Each       | DECIMAL(18,8) | N                | 拒收数量_EA,                         |
| qcStatus               | VARCHAR(2)    | N                | 质检状态,                            |
| overRcvPercentage      | DECIMAL(18,8) | N                | 超量收货百分比（%）,                      |
| referenceLineNo        | INT           | N                | 回单原参考行编号,                        |
| asnLineFilter          | VARCHAR(100)  | N                | 订单行类型,                           |
| preReceivedQty_Each    | DECIMAL(18,8) | N                | 预收货数量,                           |
| preReceivedLocation    | VARCHAR(60)   | N                | 预收货库位,                           |
| dedi01                 | VARCHAR(200)  | N                | EDI相关信息1,                        |
| dedi02                 | VARCHAR(200)  | N                | EDI相关信息2,                        |
| dedi03                 | VARCHAR(200)  | N                | EDI相关信息3,                        |
| dedi04                 | VARCHAR(200)  | N                | EDI相关信息4,                        |
| dedi05                 | VARCHAR(200)  | N                | EDI相关信息5,                        |
| dedi06                 | VARCHAR(200)  | N                | EDI相关信息6,                        |
| dedi07                 | VARCHAR(200)  | N                | EDI相关信息7,                        |
| dedi08                 | VARCHAR(200)  | N                | EDI相关信息8,                        |
| dedi09                 | DECIMAL(18,8) | N                | EDI相关信息9,                        |
| dedi10                 | DECIMAL(18,8) | N                | EDI相关信息10,                       |
| dedi11                 | VARCHAR(200)  | N                | EDI相关信息11,                       |
| dedi12                 | VARCHAR(200)  | N                | EDI相关信息12,                       |
| dedi13                 | VARCHAR(200)  | N                | EDI相关信息13,                       |
| dedi14                 | VARCHAR(200)  | N                | EDI相关信息14,                       |
| dedi15                 | VARCHAR(200)  | N                | EDI相关信息15,                       |
| dedi16                 | VARCHAR(200)  | N                | EDI相关信息16,                       |
| dedi17                 | VARCHAR(200)  | N                | EDI相关信息17,                       |
| dedi18                 | VARCHAR(200)  | N                | EDI相关信息18,                       |
| dedi19                 | VARCHAR(200)  | N                | EDI相关信息19,                       |
| dedi20                 | VARCHAR(200)  | N                | EDI相关信息20,                       |
| erpCancelFlag          | CHAR(1)       | N                | 接口取消单标记, 上游取消标记，取消标记，取消标识，订单取消标记 |
| noteText               | MEDIUMTEXT    | N                | 备注,                              |
| udf01                  | VARCHAR(500)  | N                | 自定义01,                           |
| udf02                  | VARCHAR(500)  | N                | 自定义02,                           |
| udf03                  | VARCHAR(500)  | N                | 自定义03,                           |
| udf04                  | VARCHAR(500)  | N                | 自定义04,                           |
| udf05                  | VARCHAR(500)  | N                | 自定义05,                           |
| udf06                  | VARCHAR(500)  | N                | 自定义06,                           |
| currentVersion         | INT           | N                | 当前版本号,                           |
| oprSeqFlag             | VARCHAR(65)   | N                | 操作流水标记,                          |
| addWho                 | VARCHAR(40)   | N                | 新增人员,                            |
| addTime                | DATETIME      | N                | 新增时间,                            |
| editWho                | VARCHAR(40)   | N                | 编辑人员,                            |
| editTime               | DATETIME      | N                | 编辑时间,                            |
| checkItemsFlag         | CHAR(1)       | N                | 检查项目标记,                          |
| refLineNo              | VARCHAR(30)   | N                | 上游来源行号,                          |
| fmWarehouseId          | VARCHAR(20)   | N                | 来源仓库编号,                          |
| muid                   | VARCHAR(30)   | N                | MUID,                            |
| syncFlag               | CHAR(1)       | N                | 同步标记,                            |
| parentTotalReceivedQty | DECIMAL(18,8) | N                | 父单行总收货数,                         |

When querying holdRejectCode, MUST refer to the following table and map string to its corresponding code.
| String       | Code     |
|:-------------|:---------|
| 盘亏           | CL       |
| 破损(LOST库位)   | DM       |
| 冻结           | DJ       |
| 库位封存         | HD       |
| 加工损耗         | KT       |
| 正常           | OK       |
| 拣货           | PK       |
| 盘点调整         | PT       |
| 上架           | SJ       |
| 异常           | SP       |
| 缺货           | SS       |
| 库存移动         | YD       |
| 库存转移         | ZY       |
| 盘点单产生调整      | CC       |
| 拒收           | REJECT   |
| 过期/受控产品      | EP       |
| 丢失           | LOSE     |
| 破损(DAMAGE库位) | DAMAGE   |
| 错货           | WRONGSKU |
| 包装比例错误       | WRONGUOM |

When querying asnLineFilter, MUST refer to the following table and map string to its corresponding code.
| String   |   Code |
|:---------|-------:|
| 类型1      |     11 |
| 类型2      |     23 |


When from DOC_ASN_DETAILS joining DOC_ASN_HEADER, use the proper following conditions:
DOC_ASN_DETAILS.organizationId = DOC_ASN_HEADER.organizationId
DOC_ASN_DETAILS.warehouseId = DOC_ASN_HEADER.warehouseId
DOC_ASN_DETAILS.asnNo = DOC_ASN_HEADER.asnNo


when writing SQL, must carefully refer to the following rules:
- 涉及到数量字段时，统一选取含有Each的字段

- 条目数指的是行记录数

- 件数指的是数量

- 托数=当前数量除以从包装表取packUom='PL'对应的值，举例：
  SELECT a.qty_each / (CASE WHEN BPD.qty is not null THEN BPD.qty ELSE 1 END) 托数
   FROM TABLENAMEA A
   LEFT JOIN BAS_PACKAGE_DETAILS BPD
     ON A.organizationId = BPD.organizationId
    AND A.customerId = BPD.customerId
    AND A.packId = BPD.packId
    AND BPD.packUom = 'PL'

- 箱数=当前数量除以从包装表取packUom='CS'对应的值，举例：
  SELECT a.qty_each / (CASE WHEN BPD.qty is not null THEN BPD.qty ELSE 1 END) 箱数
   FROM TABLENAMEA A
   LEFT JOIN BAS_PACKAGE_DETAILS BPD
     ON A.organizationId = BPD.organizationId
    AND A.customerId = BPD.customerId
    AND A.packId = BPD.packId
    AND BPD.packUom = 'CS'

- 收货时间取自ACT_TRANSACTION_LOG.transactionTime

- 上架时间或完成时间取自TSK_TASKLISTS.closeTime

- 当查询订单状态时，如果没有描述“部分”2个字，则排除带有“部分”的状态

- Only when query about status of “已收货未上架”, use “TSK_TASKLISTS.taskProcess=00”.

- Only when query about status of “已上架”, use “TSK_TASKLISTS.taskProcess>00”.

- 库存交易事务表operator字段是操作人，其他报表请排除operator字段

- 表之间关联必须用left join

- 交易表（ACT_TRANSACTION_LOG）关联产品表（BAS_SKU）时只用to字段，不用fm字段关联

- 交易表（ACT_TRANSACTION_LOG）关联批次属性表（INV_LOT_ATT）时只用to字段，不用fm字段关联

- 如果出现DOC_ORDER_DETAILS，ACT_TRANSACTION_LOG两张表，DOC_ORDER_DETAILS和ACT_TRANSACTION_LOG关联

- 在有交易表（ACT_TRANSACTION_LOG）的时候，以预期到货（DOC_ASN_HEADER）为主表,必须从交易表中获取收货数量

- 在有交易表（ACT_TRANSACTION_LOG）的时候，以发运订单表（DOC_ORDER_HEADER）为主表,必须从交易表中获取发运数量

- 当天/今天作为条件的时候需要转换为大于等于今天，小于明天

- 当月作为条件的时候需要转换为大于等于这个月1号，小于下个月

- 今年作为条件的时候需要转换为大于等于今年1月1号，小于明年

- 查询字段中，包含“时间”的字段名，需要把对应字段值的格式转换为2024-01-01 00:00:00；包含“日期”的字段名，需要把对应字段值的格式转换为“2024-01-01”

- 当ACT_TRANSACTION_LOG.transactionId 和 TSK_TASKLISTS.create_TransactionId 关联的时候，ACT_TRANSACTION_LOG.transactionType过滤条件优先取"IN"

- "订单数量"需要通过count(disitnct orderNo)或者count(disitnct asnNO)或者 count(disitnct docNo)

- 如果出现 DOC_ASN_HEADER, DOC_ASN_DETAILS，ACT_TRANSACTION_LOG，TSK_TASKLISTS表，关联方式为：
DOC_ASN_HEADER DAH
LEFT JOIN DOC_ASN_DETAILS DAD
ON DAH.organizationId = DAD.organizationId
and DAH.warehouseId = DAD.warehouseId
and DAH.asnNo = DAD.asnNo
LEFT JOIN ACT_TRANSACTION_LOG  ATL
ON ATL.organizationId = DAD.organizationId
and ATL.warehouseId = DAD.warehouseId
and ATL.docNo = DAD.asnNo
and ATL.docLineNo = DAD.asnLineNo
LEFT JOIN TSK_TASKLISTS TLS
ON ATL.organizationId = TLS.organizationId
and ATL.warehouseId = TLS.warehouseId
and ATL.transactionId = TLS.create_TransactionId

- 如果出现 DOC_ORDER_HEADER, DOC_ORDER_DETAILS，ACT_TRANSACTION_LOG，TSK_TASKLISTS表，关联方式为：
DOC_ORDER_HEADER DOH
INNER JOIN DOC_ORDER_DETAILS DOD
ON DOH.organizationId = DOD.organizationId
AND DOH.warehouseId = DOD.warehouseId
AND DOH.orderNo = DOD.orderNo
INNER JOIN TSK_TASKLISTS TLS
ON TLS.organizationId = DOD.organizationId
AND TLS.warehouseId = DOD.warehouseId
AND TLS.docNo = DOD.orderNo
AND TLS.docLineNo = DOD.orderLineNo
INNER JOIN ACT_TRANSACTION_LOG  ATL
ON ATL.organizationId = TLS.organizationId
AND ATL.warehouseId = TLS.warehouseId
AND ATL.transactionId = TLS.completed_TransactionId

- 如果出现 DOC_ASN_DETAILS，ACT_TRANSACTION_LOG表，关联方式为
DOC_ASN_DETAILS DAD
LEFT JOIN ACT_TRANSACTION_LOG  ATL
ON ATL.organizationId = DAD.organizationId
and ATL.warehouseId = DAD.warehouseId
and ATL.docNo = DAD.asnNo
and ATL.docLineNo = DAD.asnLineNo

- 未分配指的是状态为00状态的，未拣货指的状态小于等于40，播种指的状态为60并且packFlag = 'Y'，未发运指的状态小于70

- 复核数量指的 ACT_ALLOCATION_DETAILS.status>='40' and ACT_ALLOCATION_DETAILS.packFlag='Y' 时 ACT_ALLOCATION_DETAILS.qty_Each

- 未复核数量指的 ACT_ALLOCATION_DETAILS.packFlag='N' 时 ACT_ALLOCATION_DETAILS.qty_Each

- 出库和入库，需要单独查询，结果通过union all 的方式体现

- 交易表中出入库数量，一般需要拆分为出库数量（发货数量），和入库数量（收货数量），两个指标（字段），出库数量是当ACT_TRANSACTION_LOG.transactionType='SO'取ACT_TRANSACTION_LOG.toQty_Each，入库数量是当ACT_TRANSACTION_LOG.transactionType='IN'取ACT_TRANSACTION_LOG.toQty_Each

- 出入库对应的交易表查询条件ACT_TRANSACTION_LOG.transactionType in ('IN','SO')

- 一般操作用户/作业用户/编辑用户/操作人取值是ACT_TRANSACTION_LOG.editWho/ACT_TRANSACTION_LOG.operator/TSK_TASKLISTS.closeWho

- 盘点，同一个任务指的是（TSK_TASKLISTS.organizationId,TSK_TASKLISTS.wareHouseId,TSK_TASKLISTS.taskId） 相同，首次盘点指的是同一个任务下TSK_TASKLISTS.taskId_Sequence=1 and TSK_TASKLISTS.taskProcess='99'对应行，复盘或者最近一次盘点指的是同一个任务下max(TSK_TASKLISTS.taskId_Sequence)对应的盘点任务并且TSK_TASKLISTS.taskProcess='99'对应行
COU_REQUEST.cycleCountNo如果没有包含*符号那么判断单号取 COU_REQUEST.cycleCountNo，否则取COU_REQUEST.cycleCountNo中*号之前的字符，查询过滤和group by字段也是以此规则为准


- 操作单数指的操作订单号的个数

- 任务数指的是任务个数

- 每个订单指的是汇总维护包含单号

- 统计作业的托盘数一般指的是COUNT(DISTINCT ACT_TRANSACTION_LOG.toId)

- 当出现ACT_TRANSACTION_LOG,DOC_ASN_SERIALNO表同时出现，并且ACT_TRANSACTION_LOG取入库交易的时候，关联方式为
ACT_TRANSACTION_LOG ATL
LEFT JOIN DOC_ASN_SERIALNO DAS
ON ATL.organizationId = DAS.organizationId
and ATL.warehouseId = DAS.warehouseId
and ATL.docNo = DAS.asnNo
and ATL.toId = DAS.serialNo

- 针对类似 "DATEDIFF(CURDATE(), 时间字段) > 数值" 的查询条件，需转换为 "时间字段<  CURDATE() - 数值"

- 发货人指的是供应商

- 复核件数取ACT_ALLOCATION_DETAILS.qty_each

- 未收货数量=max(DOC_ASN_DETAILS..expectedQty_Each - DOC_ASN_DETAILS.receivedQty_Each)

- 盘点数量应该取TSK_TASKLISTS.planToQty_Each

- 边拣边分，拣货库位取 IDX_PICKTOLIGHT.fmLocation，待拣货数量为 IDX_PICKTOLIGHT.fmqty_Each - IDX_PICKTOLIGHT.toQty_Each

- 如果按照区域或者产品sku_group1等统计xxx数量，主表需要是区域表（BAS_ZONEGROUP），或者产品表（BAS_SKU）,通过 left join 关联其他表，统计的指标可以是类似count(case when 的方式)，where条件默认不填写（不加 xxxx is null），显示主表汇总维度的全部数据


- DO NOT write \" before and after alias

"""
start_time = time.time()

resp = llm.invoke(user_input)
print(resp.content)

end_time = time.time()
elapsed_time = end_time - start_time

print(f"耗时：{elapsed_time:.4f} 秒")  # 保留 4 位小数
